package org.springblade.tms.global.utils;

import org.springblade.tms.global.exception.CommonException;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;

/**
 * @ClassName EmailUtil
 * @Description 邮件发送工具
 * @Author Sophia
 * @Date 2022/4/6 16:06
 */
@Component
public class EmailUtil {

	@Value("${spring.mail.from}") // 从application.yml配置文件中获取
	private String from; // 发送发邮箱地址

	@Resource
	private JavaMailSender mailSender;

	/**
	 * 发送纯文本邮件信息
	 *
	 * @param to      接收方
	 * @param subject 邮件主题
	 * @param content 邮件内容（发送内容）
	 */
	public void sendMessage(String to, String subject, String content) {
		// 获取MimeMessage对象
		MimeMessage message = mailSender.createMimeMessage();
		MimeMessageHelper messageHelper;
		try {
			messageHelper = new MimeMessageHelper(message, true);
			// 邮件发送人
			messageHelper.setFrom(from);
			// 邮件接收人
			messageHelper.setTo(to);
			// 邮件主题
			message.setSubject(subject);
			// 邮件内容，html格式
			messageHelper.setText(content, true);
			// 发送
			mailSender.send(message);
			// 日志信息
		} catch (Exception e) {
			CommonException.throwCommonException("发送邮件失败！");
		}
	}

	/**
	 * 发送带附件的邮件信息
	 *
	 * @param to      接收方
	 * @param subject 邮件主题
	 * @param content 邮件内容（发送内容）
	 * @param files   文件数组 // 可发送多个附件
	 */
	public void sendMessageCarryFiles(String to, String subject, String content, File[] files) {
		MimeMessage mimeMessage = mailSender.createMimeMessage();
		try {
			MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
			helper.setFrom(from); // 设置发送发
			helper.setTo(to); // 设置接收方
			helper.setSubject(subject); // 设置邮件主题
			helper.setText(content); // 设置邮件内容
			if (files != null && files.length > 0) { // 添加附件（多个）
				for (File file : files) {
					helper.addAttachment(file.getName(), file);
				}
			}
		} catch (MessagingException e) {
			e.printStackTrace();
		}
		// 发送邮件
		mailSender.send(mimeMessage);
	}

	/**
	 * 发送带附件的邮件信息
	 *
	 * @param to      接收方
	 * @param subject 邮件主题
	 * @param content 邮件内容（发送内容）
	 * @param file    单个文件
	 */
	public void sendMessageCarryFile(String to, String subject, String content, File file) {
		MimeMessage mimeMessage = mailSender.createMimeMessage();
		try {
			MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
			helper.setFrom(from); // 设置发送发
			helper.setTo(to); // 设置接收方
			helper.setSubject(subject); // 设置邮件主题
			helper.setText(content); // 设置邮件内容
			helper.addAttachment(file.getName(), file); // 单个附件
		} catch (MessagingException e) {
			e.printStackTrace();
		}
		// 发送邮件
		mailSender.send(mimeMessage);
	}

	public String getFrom() {
		return from;
	}

	public void setFrom(String from) {
		this.from = from;
	}
}

